# КОНСПЕКТ ПО РЕГУЛЯРНЫМ ВЫРАЖЕНИЯМ

## Общая информация:

любое слово - проверка, есть ли это слово в строке.

^ - начало строки (например: ^Привет - cлово "Привет" стоит в начале строки).

$ - конец строки (например: Пока$ - cлово "Пока" стоит в конце строки).

\b - начало и конец слова (например: \bPy - cлова, начинающиеся с "Py"; py\b - Слова, заканчивающиеся на "py").

| - ИЛИ (например: Привет|Пока - cлово "Привет" или "Пока" есть в строке (или оба сразу)).

[ ... ] - перечисление символов (любой символ из скобок) (например: [.,!?] - указывает на любой символ пунктуации).

## Range (диапозоны, отрезки):

[0-9] - одна любая цифр от 0 до 9.

[a-z] - одна любая буква от "a" до "z".

[a-zA-Z] - одна любая буква от "a" до "z" в нижнем или верхнем регистре.

[0-9a-z] - одна любая цифр от 0 до 9 или одна любая буква от "a" до "z".

[0-9a-z!#] - одна любая цифр от 0 до 9, или одна любая буква от "a" до "z", или "!", или "#".


^ в [] - будет означать отрицание:

[^0-9] - один любой символ, кроме цифр от 0 до 9.

[^0-9a-z] - один любой символ, кроме цифр от 0 до 9 и букв от "a" до "z".

\b[^ABC] - слово, которое начинается с любой буквы, кроме "A", "B", "C".

## Квантификаторы:

[0-9] - одна любая цифра.

[0-9]{3} - три любых цифры подряд.

[0-9]{3,5} - от трёх до пяти любых цифр подряд.

ВМЕСТО 3 и 5 могут стоять любые другие цифры.

## Сокращения:

\d - любая цифра (сокращение от [0-9]).

\D - любая не цифра (сокращение от [^0-9]).

\w - любой алфавитно-цифровой символ или "_" (сокращение от [a-zA-zа-яА-Я0-9_]).

\W - любой не алфавитно-цифровой символ или не "_" (сокращение от [^a-zA-zа-яА-Я0-9_]).

\s - пробельный символ (табуляция и разрыв строки) (сокращение от [ ]).

\S - любой непробельный символ (сокращение от [^ ]).

. - один любой символ.


[0-9]* - от 0 до бесконечности цифр подряд (сокращение от [0-9]{0,}).

[0-9]+ - от 1 до бесконечности цифр подряд (сокращение от [0-9]{1,}).

[0-9]? - от 0 до 1 цифр (сокращение от [0-9]{0,1}).

## Другое:

Специальные символы + * ? { } ( ) \ необходимо экранировать с помощью дополнительно знака \ перед символом.


Группы обозначаются с помощью (), которым с помощью \n или $n можно задать номер (n - любое число или название).

(.*?) - любой текст.

(.+) или (.*) - жадный поиск (до последнего вхождения шаблона).

(.+?) или (.*?) - ленивый поиск (до первого вхождения шаблона).


X(?=Y) - позитивная опережающая проверка - найти X если за ним следует Y.

X(?|Y) - негативная опережающая проверка - найти X если за ним НЕ следует Y.

(?<=Y)X - позитивная ретроспективная проверка - найти X если перед ним стоит Y.

(?<|Y)X - негативная ретроспективная проверка - найти X если перед ним НЕ стоит Y.

## Примеры:

^[!/]бот - строка начинается с "!" или "/", а затем идёт слово "бот".

№\d - символ номера, а затем любая цифра.

\+|\-?\d+ - знак плюса или знак минуса появляются от 0 до 1 раза, затем идёт минимум одна цифра.

(\d+)(\s?)(\$|€|₽) - все цены из текста: 1) минимум 1 цифра; 2) 0 или 1 пробел; 3) любой знак валюты.

\d+(\.|,)?\d* - все числа (целые и дробные): 1) минимум 1 цифра; 2) может быть "." или ",", если число дробное; 3) либо будут цифры, если число дробное, либо нет, если целое.

# БИБЛИОТЕКА "RE" В PYTHON

1. Поиск подстроки в строке (search, match).

2. Поиск всех подходящих строк (findall, finditer).

3. Разделение строки на подстроки (split).

4. Замена части строки (sub).

## Примеры:

### Метод re.search:
import re

text = "Name: Evgeniy. Birthday: 31 August, 2008"
reg = r"Name: ([a-zA-Z]+)\. Birthday: (\d+) ([a-zA-z]+), (\d+)"
match = re.search(reg, text)
if match:
    print(f"Группа 1 - имя: {match.group(1)}")
    print(f"Группа 2 - день: {match.group(2)}")
    print(f"Группа 3 - месяц: {match.group(3)}")
    print(f"Группа 4 - год: {match.group(4)}")
Группа 1 - имя: Evgeniy
Группа 2 - день: 31
Группа 3 - месяц: August
Группа 4 - год: 2008
### Метод re.match:
import re

text1 = "my_py1thon3!pass"
match = re.match(r"^[a-zA-Z0-9_\-!?]{8,16}$", text1)
if match:
    print(f"Пароль надёжный.")
else:
    print("Пароль ненадёжный.")

text2 = "python"
match = re.match(r"^[a-zA-Z0-9_\-!?]{8,16}$", text2)
if match:
    print(f"Пароль надёжный.")
else:
    print("Пароль ненадёжный.")
Пароль надёжный.
Пароль ненадёжный.
### Метод re.sub:
import re

text = "150 + 150 = 300"
reg = r"\d+"
replacement = "***"
new_text = re.sub(reg, replacement, text)
print(f"Новая строка: {new_text}")
Новая строка: *** + *** = ***
### Метод re.split:
import re

text = "Python, JavaScript, C#, Pascal"
list_text = re.split(r",", text)
print(f"Список: {list_text}")
Список: ['Python', ' JavaScript', ' C#', ' Pascal']
### Метод re.findall:
import re

text = '''
<div>
    <h1>Заголовок 1</h1>
    <h2>Заголовок 2</h2>
    <p>Параграф</p>
</div>
'''
reg = r"<([a-z0-9]+)>"
tags = re.findall(reg, text)
print(f"Теги: {tags}")
Теги: ['div', 'h1', 'h2', 'p']
Онлайн-компилятор Python
Здесь вы можете попробовать написать любой код на языке Python, включая регулярные выражения, а также любые другие библиотеки.
Работает на базе Piston API (emkc.org)
Результат выполнения появится здесь...
Конспект составил Евгений Мыльников.
Сайт разработал: DeepSeek.